'''
* This is the projet for Brtc LlmOps Platform
* @Author Leon-liao <liaosiliang@alltman.com>
* @Description //TODO 
* @File: 1_study_prompt_base_use.py
* @Time: 2025/7/6
* @All Rights Reserve By Brtc
'''
import datetime

from langchain_core.messages import AIMessage
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate, MessagesPlaceholder, HumanMessagePromptTemplate

# 创建一个提示次模板，变量是 subject，是可以 任意定义的
prompt = PromptTemplate.from_template("请讲一个关于{subject}的笑话")
# 对提示词模板里面的变量进行赋值。 通过 invoke
prompt_value = prompt.invoke({"subject":"程序员"})
#通过format 方法对 提示词里面的变量进行赋值 --->直接能看到的消息
print(prompt.format(subject="医生"))
#将赋值完成的提示词变量转换成string -----> 是能够直接能 看到的消息
print(prompt_value.to_string())
# 将赋值完成的提示词变量转换成message ---> 能够被llm 直接使用
print(prompt_value.to_messages())
print("===========================")
# 构建一个聊天提示模板
# 该模板包含， 系统提示词  历史记录  包含用户问题

chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是OpenAi 开发的机器人，请根据用户的问题直接进行回复， 当前时间为{now}"),
    MessagesPlaceholder("chat_history"),
    HumanMessagePromptTemplate.from_template("请讲一个关于{subject}的冷笑话")
]).partial(now = datetime.datetime.now)

chat_prompt_value = chat_prompt.invoke({
    "chat_history":[
        ("human", "我叫博小睿"),
        AIMessage("你好我是ChatGpt, 有什么可以帮你的吗？")
    ],
    "subject":"程序员"
})

print(chat_prompt_value)
print(chat_prompt_value.to_string())
